﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using negocios;
using objetos;
using publico;


namespace softsales.pagina.condicao_pagamento
{
    public partial class condicao_pagamento_formulario : System.Web.UI.Page
    {
        BLL_TB_CONDICAO_PAGAMENTO b_tb_condicao_pagamento = new BLL_TB_CONDICAO_PAGAMENTO();
        OBJ_TB_CONDICAO_PAGAMENTO o_tb_condicao_pagamento = new OBJ_TB_CONDICAO_PAGAMENTO();

        BLL_TB_CARTAO_CREDITO b_tb_cartao_credito = new BLL_TB_CARTAO_CREDITO();
        BLL_TB_CONTA_CONTABIL b_tb_conta_contabil = new BLL_TB_CONTA_CONTABIL();
        OBJ_TB_CONTA_CONTABIL o_tb_conta_contabil = new OBJ_TB_CONTA_CONTABIL();

        BLL_TB_TIPO_CONDICAO_PAGAMENTO b_tb_tipo_condicao_pagamento = new BLL_TB_TIPO_CONDICAO_PAGAMENTO();
        OBJ_TB_TIPO_CONDICAO_PAGAMENTO o_tb_tipo_condicao_pagamento = new OBJ_TB_TIPO_CONDICAO_PAGAMENTO();


        OBJ_TB_CONDICAO_PAGAMENTO_PRAZO o_tb_condicao_pagamento_prazo = new OBJ_TB_CONDICAO_PAGAMENTO_PRAZO();
        BLL_TB_CONDICAO_PAGAMENTO_PRAZO b_tb_condicao_pagamento_prazo = new BLL_TB_CONDICAO_PAGAMENTO_PRAZO();

        BLL_TB_FORMA_PAGAMENTO b_tb_forma_pagamento = new BLL_TB_FORMA_PAGAMENTO();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (PUB_SESSAO.Logado())
            {

                if (!IsPostBack)
                {

                    b_tb_forma_pagamento.PreencheControle(DDL_ID_FORMA_PAGAMENTO, true);
                    b_tb_cartao_credito.PreencheControle(DDL_ID_CARTAO_CREDITO, true);
                    b_tb_tipo_condicao_pagamento.PreencheControle(DDL_ID_TIPO_CONDICAO_PAGAMENTO, true);
                    TXT_PARCELAS.Text = "0";



                    if (Request["id"] != null)
                    {

                        LBL_TITULO_PAGINA.Text = "Editar Condição de Pagamento";

                        Editar(Request["id"].ToString());

                    }
                    else
                    {
                        LBL_TITULO_PAGINA.Text = "Incluir Condição de Pagamento";

                    }

                }
                else
                {

                    if (Session["id_conta_contabil"] != null)
                    {
                        int id_conta_contabil = Convert.ToInt32(Session["id_conta_contabil"].ToString());
                        o_tb_conta_contabil = b_tb_conta_contabil.SelecionarObjetoPorId(id_conta_contabil);


                        TXT_ID_CONTA_CONTABIL.Text = o_tb_conta_contabil.id.ToString();
                        TXT_DESC_CONTA_CONTABIL.Text = o_tb_conta_contabil.desc_conta_contabil.ToString();

                        Session.Remove("id_conta_contabil");
                    }

                }
            }


        }

        private void Editar(String id)
        {
            o_tb_condicao_pagamento = b_tb_condicao_pagamento.SelecionarObjetoPorId(Convert.ToInt32(id));

            if(o_tb_conta_contabil != null)
            o_tb_conta_contabil = b_tb_conta_contabil.SelecionarObjetoPorId(Convert.ToInt32(o_tb_condicao_pagamento.id_conta_contabil));

            HF_ID.Value = o_tb_condicao_pagamento.id.ToString();
            TXT_DESCRICAO.Text = o_tb_condicao_pagamento.desc_condicao_pagamento.ToString();            
            TXT_DESC_CONTA_CONTABIL.Text = o_tb_conta_contabil.desc_conta_contabil.ToString();
            DDL_ID_CARTAO_CREDITO.SelectedValue = o_tb_condicao_pagamento.id_cartao_credito.ToString();
            TXT_ID_CONTA_CONTABIL.Text = o_tb_condicao_pagamento.id_conta_contabil.ToString();
            DDL_ID_FORMA_PAGAMENTO.SelectedValue = o_tb_condicao_pagamento.id_forma_pagamento.ToString();
            DDL_ID_TIPO_CONDICAO_PAGAMENTO.SelectedValue = o_tb_condicao_pagamento.id_tipo_condicao_pagamento.ToString();
            TXT_INTERVALO.Text = o_tb_condicao_pagamento.intervalo.ToString();
            TXT_PARCELAS.Text = o_tb_condicao_pagamento.parcelas.ToString();
            TXT_VALOR_MULTA_ATRASO.Text = o_tb_condicao_pagamento.valor_multa_atraso.ToString();
            TXT_VALOR_TAXA_BANCO.Text = o_tb_condicao_pagamento.valor_taxa_banco.ToString();
            TXT_VALOR_TAXA_OPERACAO.Text = o_tb_condicao_pagamento.valor_taxa_operacao.ToString();
            CHK_SIT_ATIVO.Checked = o_tb_condicao_pagamento.sit_ativo;



        }


        private bool ValidarPrazo(int parcelas)
        {
                bool erro = false;

                for (int i = 1; i <= parcelas; i++)
                {

                    TextBox txt = (TextBox)PUB_FUNCOES.EncontrarControle(this.Page, "TXT_PRAZO_" + i.ToString());

                    if (txt.Text != string.Empty)
                    {
                        erro = false;
                    }
                    else
                    {
                        erro = true;
                        break;
                    }

                }
                return erro;
   

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {

            try
            {
                string msg = string.Empty;
                bool erro = false;
                int id_condicao_pagamento = 0;
                int parcelas = 0;
                    
                if(TXT_PARCELAS.Text != string.Empty)
                   parcelas = Convert.ToInt32(TXT_PARCELAS.Text);

                if (parcelas > 0)
                {
                    erro = ValidarPrazo(Convert.ToInt32(TXT_PARCELAS.Text));
                }
                else
                {
                    erro = false;
                }

                if (!erro)
                {
                    
                    if (TXT_DESCRICAO.Text != string.Empty && TXT_INTERVALO.Text != string.Empty && TXT_PARCELAS.Text != string.Empty)
                    {
                        o_tb_condicao_pagamento.desc_condicao_pagamento = TXT_DESCRICAO.Text;


                        o_tb_condicao_pagamento.id_cartao_credito = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_CARTAO_CREDITO.SelectedValue));
                        o_tb_condicao_pagamento.id_conta_contabil = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_ID_CONTA_CONTABIL.Text));
                        o_tb_condicao_pagamento.id_forma_pagamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_FORMA_PAGAMENTO.SelectedValue));
                        o_tb_condicao_pagamento.id_tipo_condicao_pagamento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_TIPO_CONDICAO_PAGAMENTO.SelectedValue));
                        o_tb_condicao_pagamento.intervalo = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_INTERVALO.Text));
                        o_tb_condicao_pagamento.parcelas = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(TXT_PARCELAS.Text));
                        o_tb_condicao_pagamento.sit_ativo = Convert.ToBoolean(CHK_SIT_ATIVO.Checked);
                        o_tb_condicao_pagamento.valor_multa_atraso = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_MULTA_ATRASO.Text));
                        o_tb_condicao_pagamento.valor_taxa_banco = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TAXA_BANCO.Text));
                        o_tb_condicao_pagamento.valor_taxa_operacao = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_TAXA_OPERACAO.Text));

                        if (HF_ID.Value != string.Empty)
                        {                            
                            id_condicao_pagamento = Convert.ToInt32(HF_ID.Value);

                            o_tb_condicao_pagamento.id = id_condicao_pagamento;

                            b_tb_condicao_pagamento.Alterar(o_tb_condicao_pagamento);
                            msg = PUB_MENSAGEM.MSG_ALTERACAO;
                        }
                        else
                        {
                            
                            id_condicao_pagamento = b_tb_condicao_pagamento.Incluir(o_tb_condicao_pagamento);
                       
                          
                            
                             msg = PUB_MENSAGEM.MSG_INCLUSAO;
                        }

                        // SE  A CONDICAO PAGAMENTO TIVER MAIS QUE 1 PARCELA 
                        // EXCLUI OS PRAZOS EXISTENTES E INCLUI NOVAMENTE
                        if (o_tb_condicao_pagamento.parcelas > 0)
                        {
                            b_tb_condicao_pagamento_prazo.Excluir(id_condicao_pagamento);

                            for (int i = 1; i <= o_tb_condicao_pagamento.parcelas; i++)
                            {
                                o_tb_condicao_pagamento_prazo.id_condicao_pagamento = id_condicao_pagamento;

                                TextBox txt = (TextBox)PUB_FUNCOES.EncontrarControle(this.Page, "TXT_PRAZO_" + i.ToString());

                                if (txt != null)
                                    o_tb_condicao_pagamento_prazo.prazo = Convert.ToInt32(txt.Text);
                                    o_tb_condicao_pagamento_prazo.valor_rateio = Convert.ToDecimal("0,00");
                                    o_tb_condicao_pagamento_prazo.valor_acresicmo = Convert.ToDecimal("0,00");

                                b_tb_condicao_pagamento_prazo.Incluir(o_tb_condicao_pagamento_prazo);
                            }
                        }
                       
                            

                        Master.MSG_ALERTA(msg, "default.aspx", false);
                    }

                }
                else
                {
                    Master.MSG_ALERTA("Não foi possível salvar o formulário, pois é necessário preencher o prazo das parcelas.");

                }

            }
            catch (Exception)
            {
                
                throw;
            }
           
           


        }

        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {
            Response.Redirect("default.aspx", false);
        }

        protected void TXT_INTERVALO_TextChanged(object sender, EventArgs e)
        {
            int parcela = 0;
            int intervalo = 0;
            if(TXT_PARCELAS.Text != string.Empty)
            {
                parcela = Convert.ToInt32(TXT_PARCELAS.Text);

            }

            if(TXT_INTERVALO.Text != string.Empty)
            {
                
                intervalo = Convert.ToInt32(TXT_INTERVALO.Text);
            }

            CalcularPrazo(parcela, intervalo);
        }

        private void CalcularPrazo(int parcela, int intervalo)
        {

            int prazo = intervalo;
            for (int i = 1; i <= parcela; i++ )
            {
                TextBox txt = (TextBox)PUB_FUNCOES.EncontrarControle(this.Page, "TXT_PRAZO_"+i.ToString());
                txt.Text = prazo.ToString();
                prazo = prazo + intervalo;
            }

        }

   
    }
}